/**
 * 小程序配置文件
 */

// 开发环境配置
const DEV_CONFIG = {
  BASE_URL: 'https://api.zhihunyun.xyz',  // 统一使用域名地址
  // BASE_URL: 'http://localhost:3000',  // 本地开发备用
  // BASE_URL: 'http://192.168.1.100:3000',  // 局域网地址，可根据实际IP调整
  API_TIMEOUT: 30000,
  UPLOAD_TIMEOUT: 60000
}

// 生产环境配置
const PROD_CONFIG = {
  BASE_URL: 'https://api.zhihunyun.xyz',  // 正确的生产服务器地址
  API_TIMEOUT: 30000,
  UPLOAD_TIMEOUT: 60000
}

// 根据环境选择配置
const isDev = process.env.NODE_ENV !== 'production'
const config = isDev ? DEV_CONFIG : PROD_CONFIG

console.log('[Config] 当前环境:', isDev ? '开发环境' : '生产环境')
console.log('[Config] 服务器地址:', config.BASE_URL)

// 预设配置
const PRESET_CONFIGS = [
  {
    id: 'local',
    name: '本地开发环境',
    description: 'localhost:3000 (备用)',
    config: {
      BASE_URL: 'http://localhost:3000',
      WS_URL: 'ws://localhost:3000',
      API_TIMEOUT: 30000,
      UPLOAD_TIMEOUT: 60000
    }
  },
  {
    id: 'lan',
    name: '局域网环境',
    description: '192.168.1.100:3000',
    config: {
      BASE_URL: 'http://192.168.1.100:3000',
      WS_URL: 'ws://192.168.1.100:3000',
      API_TIMEOUT: 30000,
      UPLOAD_TIMEOUT: 60000
    }
  },
  {
    id: 'production',
    name: '生产环境',
    description: 'api.zhihunyun.xyz',
    config: {
      BASE_URL: 'https://api.zhihunyun.xyz',
      WS_URL: 'wss://api.zhihunyun.xyz',
      API_TIMEOUT: 30000,
      UPLOAD_TIMEOUT: 60000
    }
  }
]

// 当前运行时配置
let runtimeConfig = { ...config, WS_URL: config.BASE_URL.replace('http', 'ws') }

/**
 * 验证URL是否有效
 */
export function validateUrl(url) {
  try {
    new URL(url)
    return true
  } catch (error) {
    return false
  }
}

/**
 * 获取当前配置
 */
export function getCurrentConfig() {
  return { ...runtimeConfig }
}

/**
 * 更新开发配置
 */
export function updateDevConfig(newConfig) {
  try {
    // 验证配置
    if (newConfig.BASE_URL && !validateUrl(newConfig.BASE_URL)) {
      throw new Error('无效的 BASE_URL')
    }
    if (newConfig.WS_URL && !validateUrl(newConfig.WS_URL)) {
      throw new Error('无效的 WS_URL')
    }

    // 更新运行时配置
    runtimeConfig = { ...runtimeConfig, ...newConfig }
    
    // 保存到本地存储
    uni.setStorageSync('DEV_CONFIG', runtimeConfig)
    
    console.log('[Config] 配置已更新:', runtimeConfig)
    return true
  } catch (error) {
    console.error('[Config] 更新配置失败:', error.message)
    return false
  }
}

/**
 * 重置开发配置
 */
export function resetDevConfig() {
  try {
    // 恢复默认配置
    runtimeConfig = { ...config, WS_URL: config.BASE_URL.replace('http', 'ws') }
    
    // 清除本地存储
    uni.removeStorageSync('DEV_CONFIG')
    
    console.log('[Config] 配置已重置:', runtimeConfig)
    return true
  } catch (error) {
    console.error('[Config] 重置配置失败:', error.message)
    return false
  }
}

/**
 * 获取预设配置
 */
export function getPresetConfigs() {
  return [...PRESET_CONFIGS]
}

// 初始化时尝试加载本地存储的配置
try {
  const savedConfig = uni.getStorageSync('DEV_CONFIG')
  if (savedConfig) {
    runtimeConfig = { ...runtimeConfig, ...savedConfig }
    console.log('[Config] 已加载本地配置:', runtimeConfig)
  }
} catch (error) {
  console.log('[Config] 使用默认配置')
}

// 导出配置
export const BASE_URL = runtimeConfig.BASE_URL
export const API_TIMEOUT = runtimeConfig.API_TIMEOUT
export const UPLOAD_TIMEOUT = runtimeConfig.UPLOAD_TIMEOUT
export const WS_URL = runtimeConfig.WS_URL

// 导出完整配置对象
export default runtimeConfig